import Vue from 'vue'
import axios from 'axios'
import conf from '@/config/env.config' // 路径配置
import store from '@/store'

//全局默认配置
const service = axios.create({
  baseURL: process.env.NODE_ENV == 'production' ? conf.proBaseURL : conf.devBaseURL,
  timeout: 15000, // 请求超时时间
  headers: {
    'X-Requested-With': 'XMLHttpRequest',
    'content-type': 'application/json',
  }
})

/* 请求拦截器 */
service.interceptors.request.use(
  config => {
    console.log("config", config)
    if (config.isLoad) {
      Vue.prototype.$Toast.loading({
        duration: 0,       // 持续展示 toast
        forbidClick: true, // 禁用背景点击
        mask: false,        //是否显示遮罩层
        message: '加载中...'
      });
    }
    return config;
  },
  error => {
    return Promise.error(error);
  })

/* 响应拦截器 */
service.interceptors.response.use(
  response => {
    Vue.prototype.$Toast.clear() //隐藏loading
    return response
  },
  error => {
    Vue.prototype.$Toast.clear();  //隐藏loading
    if (error && error.response) {
      switch (error.response.status) {
        case 401: // 401: 未登录
          Vue.prototype.$Toast(error.response.data.msg)
          console.log('未登录')
          break;
        case 403: //拒绝访问
          console.log('拒绝访问')
          break;
        case 404: // 404请求不存在
          console.log('404请求不存在')
          break;
        case 500:
          console.log('服务器端出错')
          break;
        // 其他错误，直接抛出错误提示
        default:
          console.log(error.response.data.message)
      }
    } else {
      console.log('连接到服务器失败')
    }
    return Promise.reject(error.response);
  }
)

/*
   get请求方法
   url 请求地址
   param 请求时携带的参数
   isLoad 是否需要loading
 */
export function getAction(url, params, isLoad) {
  return service({
    url: url,
    method: 'get',
    params: params,
    loading: isLoad
  }).catch((e) => {});
}

/*
   post请求方法
   url 请求地址
   param 请求时携带的参数
   isLoad 是否需要loading
 */
export function postAction(url, params, isLoad) {
  return service({
    url: url,
    method: 'post',
    data: params,
    loading: isLoad
  }).catch((e) => {});
}
